
import { request } from '@/service/request';
/**
 * 根据经纬度获取两点之间的直线距离
 * @param lat1 - 地点1纬度
 * @param lng1 - 地点1经度
 * @param lat2 - 地点2纬度
 * @param lng2 - 地点2经度
 * @param fixed - 小数点后几位
 */
export const calculateDistance = (lat1: number, lng1: number, lat2: number, lng2: number, fixed: number) => {
    const toRadians = (degrees: number) => degrees * Math.PI / 180;

    const R = 6371; // 地球半径(公里)
    const φ1 = toRadians(lat1);
    const φ2 = toRadians(lat2);
    const Δφ = toRadians(lat2 - lat1);
    const Δλ = toRadians(lng2 - lng1);

    const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
        Math.cos(φ1) * Math.cos(φ2) *
        Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    return (R * c).toFixed(fixed); // 最终距离(公里)
};


/**
 * 格式化距离显示
 * @param distance - 距离（米）
 * @returns 格式化后的距离字符串，如 "321m" 或 "7.3km"
 */
export const formatDistance = (distance: number): string => {
    if (distance < 1000) {
        return `${Math.round(distance)}m`;
    } else {
        const km = distance / 1000;
        // 如果公里数是整数，不显示小数点
        if (km % 1 === 0) {
            return `${km}km`;
        } else {
            // 保留一位小数
            return `${km.toFixed(1)}km`;
        }
    }
};

/**
 * 根据经纬度获取两点之间的驾车距离
 * @param lat1 - 起点纬度
 * @param lng1 - 起点经度
 * @param lat2 - 终点纬度
 * @param lng2 - 终点经度
 * @returns Promise<{distance: number, duration: number, toll: number}> 返回距离(米)、时间(秒)、过路费(元)
 */
export const calculateDrivingDistance = async (lat1: number, lng1: number, lat2: number, lng2: number) => {
    const origin = `${lat1},${lng1}`;      // 起点坐标
    const destination = `${lat2},${lng2}`; // 终点坐标
    
    // 构造请求URL
    const url = `/baidu/map/driving`;
    
    try {
        // 使用统一的请求方式发起 POST 请求
        const data = await request.post(url, {
            origin,
            destination
        }, { useErrMsg: true });
        
        // 处理响应数据
        if (data.success) {
            const result = data.success as any;
            const distance = result.distance;  // 距离(米)
            const duration = result.duration;  // 时间(秒)
            const toll = result.toll;          // 过路费(元)
            
            return {
                distance,
                duration,
                toll
            };
        } else {
            throw new Error(data.error?.message || '驾车距离计算失败');
        }
    } catch (error) {
        throw error;
    }
};